home *** CD-ROM | disk | FTP | other *** search
- /*************************************************************************/
- /* */
- /* COMPC.C et DECOMP.C Compression et décompression de fichiers source C */
- /* V1.00 FREEWARE Christian BRUNON 20-08-1993 */
- /* */
- /* +-----------------------------------------+ */
- /* | Logiciel placé dans le domaine FREEWARE | */
- /* +-----------------------------------------+ */
- /* L'utilisation et la diffusion de ce programme, des fichiers sources */
- /* et de la documentation sont entièrement libres. */
- /* */
- /* Christian BRUNON */
- /* 30 Rue Georges Brassens */
- /* 43140 LA SEAUVE SUR SEMENE */
- /* FRANCE */
- /* */
- /* Fichier source Lattice C AmigaDOS Version 5.04 */
- /* */
- /*************************************************************************/
-
- CompC : Utilitaire de compression de fichiers sources écrits en langage C.
- DeCompC : L'utilitaire de décompression.
-
- CompC permet de compresser les fichiers sources écrits en C à un taux de
- 25 % environ.
-
- On peut compresser d'autres types de fichiers ASCII, mais avec des gains
- moins importants.
-
-
- Utilisation de CompC :
- --------------------
-
- CompC [-DEST] Fichier1 [-DEST] [Fichier2] [...]
-
- Fichier1, Fichier2 sont les fichiers à compresser, préciser bien
- l'extension ".C" pour les sources en langage C, il n'y a pas d'extension
- par défaut.
-
- -DEST est le répertoire de sauvegarde des fichiers compressés.
- En l'absence de ce paramètre, les fichiers sont compressés dans le réper-
- toire du fichier à compresser. Lorsqu'un nouveau répertoire est précisé,
- il est effectif pour les fichiers suivants jusqu'à ce qu'un nouveau
- répertoire soit précisé.
-
- Si aucune destination n'est précisée, la sauvegarde se fait dans le même
- répertoire que le fichier source.
-
- Si le répertoire de destination n'existe pas, il est créé.
-
- Les fichiers compressés ont l'extension ".K" et ils conservent les bits de
- protection et le commentaire des fichiers sources.
-
- Le logiciel écrit les noms de fichiers sources, suivis de leur longueur en
- octets, du nombre d'octets lus actuellement.
-
- Cette dernière valeur est remplacée, en fin de compression, par la longueur
- du fichier compressé et suivi par le taux de compression.
-
- Si un fichier n'a pût être compressé pour une insuffisance de mémoire, une
- erreur DOS ou parceque le fichier comprimé est plus volumineux que le fi-
- chier source, aucun fichier compressé ne sera produit pour ce fichier sour-
- ce.
-
-
- Exemple :
- -------
-
- CompC DF0:Exemple.C -RAM: Util.C - Rep/CompC.C -INCLUDE: DISK:Test.C
- ***** * *********
-
-
- Résultats : Fichiers sources | fichiers compressés
- --------- -----------------+--------------------
- DF0:Exemple.C | DF0:Exemple.C.K
- Util.C | RAM:Util.C.K
- Rep/CompC.C | CompC.C.K ( Répertoire actuel )
- DISK:Test.C | INCLUDE:Test.C.K
-
-
- Fonctionnement :
- --------------
-
- CompC comprime les espaces se trouvant au début des lignes, celà est trés
- intéressant puisque beaucoup de lignes commencent par un nombre important
- d'espaces et de tabulations. Les codes de tabulation sont remplacés par un
- espace. Evitez toutefois d'utiliser les tabulations dans les éditeurs et
- les traîtements de textes, à l'impression du document, celà produit des
- lignes complètement décalées les unes des autres, une horreur.
-
- CompC utilise un système de dictionnaire inscrit au fur et à mesure dans le
- fichier compressé. Chaque fois qu'un nouveau mot ( instruction, mot-clé,
- fonction, ... ) est trouvé dans le fichier à compresser, il est écrit dans
- le fichier compressé précédé et suivi d'une marque (octet) de 'NouveauMot'.
- On le range dans un tableau trié ( par insertion ) ( le dictionnaire ) et
- un numéro lui est affecté.
- Ainsi, chaque fois que ce mot est relu dans le fichier à compresser, il est
- remplacé par une marque (octet) de 'Mot Existant', suivi par le numéro du
- mot ( PAS par sa position dans le tableau ).
-
- CompC comprime aussi les commentaires ( délimités par /* et */ ) et les
- chaînes située entre guillemets.
-
- CompC code sur un octet les séquences de caractères suivantes car elles se
- retrouvent trés fréquemment dans un fichier source C :
- Séquence -> Code ( Octet )
- '/*' -> Commentaire1On
- '*/' -> Commentaire1Off
- '/* ' -> Commentaire2On
- ' */' -> Commentaire2Off
-
- Tous les codes inscrits dans le fichier comprimé ( NouveauMot, Commentai-
- re1On, ... ) sont des codes non utilisés par l'éditeur LSE ( Lattice Screen
- Editor ). Ces codes ne sont jamais utilisés dans des éditeurs de code ascii
- pur ( Ed, Edit, ... ). Ce n'est pas le cas de NotePad qui utilise des codes
- de contrôle. Vous pouvez donc utiliser cet utilitaire pour comprimer tout
- fichier texte en ascii pur. Les performances seront peut-être moins bonnes
- qu'avec un fichier source en C.
-
-
- CONSEIL :
- -------
-
- Lorsque CompC lit un nouveau mot et que celui-ci est directement suivi par
- une parenthèse ouverte ( nom de fonction, de macro ou d'instruction ) ou
- par un crochet ouvert ( nom de tableau ou de chaîne ( c'est la même chose !
- ) ), ce caractère est inclu avec le mot. Il est donc conseillé de ne pas
- insérer d'espace entre ce type de mot et le crochet ou la parenthèse qui
- suit. Remplacez 'while (' par 'while(', 'Chaine [i]' par 'Chaine[i]'. Le
- dictionnaire prendra alors les nouveaux mots 'while(' et 'Chaine['. Celà
- permet de gagner un peu plus de place et d'obtenir des gains plus impor-
- tants.
-
-
- Extensions futures :
- ------------------
-
- Compresser les séquences d'espaces ( pas seulement les espaces en début de
- lignes ) et de '*'. Ces séries de caractères se rencontrent souvent dans
- les fichiers sources en C.
-
- J'ai écrit un utilitaire équivalent pour les fichiers sources en TURBO
- PASCAL sur PC. Je pourrais envisager dans l'avenir de l'adapter aux fi-
- chiers sources KickPascal sur AMIGA. Sur PC, les fins de lignes sont mar-
- quées par un code de saut de ligne ( LF = LINEFEED = ASCII 10 ) ET par un
- code de retour chariot ( CR = CARRIAGE RETURN = ASCII 13 ). Sur AMIGA, les
- lignes de fichiers textes sont uniquement marquées par un code de saut de
- ligne. Celà permet sur les PC de comprimer plus efficacement en supprimant
- l'un des deux codes, puisqu'ils font double emploi. Ainsi, pour un texte de
- 1024 lignes ( on atteint trés vite ce nombre ), en éliminant l'un de ces
- codes à la compression ( quitte à le restituer à la décompression ), on ré-
- alise une économie d'un KiloOctet ( = 1 024 octets ) de place, ce qui n'est
- pas négligeable, surtout lorqu'on sait que des fichiers peuvent contenir
- plusieurs milliers de lignes.
-
-
- Utilisation de DeCompC :
- ----------------------
-
- DeCompC [-DEST] Fichier1[.K] [-DEST] [Fichier2[.K]] [...]
-
- Fichier1, Fichier2 sont les fichiers à décompresser. Ils doivent posséder
- l'extension ".K", mais il est inutile de le préciser dans la ligne de com-
- mande.
-
- -DEST a la même signification que pour CompC.
-
- De même, les fichiers décompressés conservent leurs bits d'attributs et
- leur commentaire.
-
- Un fichier décompressé peut avoir une taille inférieure à sa taille d'ori-
- gine ( avant d'être compressé ). En effet, CompC élimine les espaces qui
- peuvent se trouver en fin de ligne.
-
-
- Exemple :
- -------
-
- DeCompC DF1:EX1.C -DF1:REP RAM:EX2.C.K LIB:EX3.C - RAM:EX4.C
- ******** *
-
-
- Résultats : Fichiers compressés | fichiers sources
- --------- --------------------+-----------------
- DF1:EX1.C.K | DF1:EX1.C
- RAM:EX2.C.K | DF1:REP/EX2.C
- LIB:EX3.C.K | DF1:REP/EX3.C
- RAM:EX4.C.K | EX4.C ( Répertoire actuel )
-
-
-
- Aprés de nombreux tests, je n'ai pût déceler de bugs. Si vous en découvrez
- un, veuillez avoir la gentillesse de m'en prévenir.
-